#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "askdialog.h"
#include "tipdialog.h"

#include <QLabel>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::InitUI()
{
    // 先设置一些控件不被启用（连接网络后才启用）
    //ui->sendBtn->setEnabled(false);
    //ui->clearBtn->setEnabled(false);
    //ui->inputPlainTextEdit->setEnabled(false);
    m_myAvatar = new QPixmap(":/images/me.png");
    m_deepseekAvatar = new QPixmap(":/images/deepseek.png");
    ui->listWidget->setSelectionMode(QAbstractItemView::NoSelection);
}

void MainWindow::AddMyItem(const QString &question)
{
    // 1.创建一个项
    QListWidgetItem* item = new QListWidgetItem();
    QWidget* itemWidget = new QWidget();// 创建一个QWidget来显示信息
    QHBoxLayout* layout = new QHBoxLayout(itemWidget);// 创建水平布局对象
    layout->setContentsMargins(0,0,0,0);// 取消边距
    layout->setAlignment(Qt::AlignCenter);// 居中

    // 2.创建头像标签
    QLabel* avatarLabel = new QLabel();
    avatarLabel->setFixedSize(40,40);
    avatarLabel->setPixmap(m_myAvatar->scaled(40,40,Qt::KeepAspectRatio,Qt::SmoothTransformation));

    // 3.创建文本内容
    QLabel* textLabel = new QLabel();
    textLabel->setText(question);
    textLabel->setScaledContents(true);
    textLabel->setMaximumWidth(800);// 文本宽度最大为800
    textLabel->setWordWrap(true);// 设置自动换行
    textLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);// 设置为可选
    textLabel->setStyleSheet("background-color: rgb(167, 214, 255);"
                             "color: black; border-radius: 10px;"
                             "padding: 5px; line-height: 2; text-align: center;"
                             "font: 450 12pt 'Microsoft YaHei UI Light';");
    textLabel->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
    textLabel->setContentsMargins(5,5,5,5);

    // 4.添加进项
    layout->addStretch();// 左边添加推力
    layout->addWidget(textLabel);// 先添加内容信息
    layout->addWidget(avatarLabel);// 再添加头像信息
    layout->addSpacing(15);// 间距

    // 5.调整高度
    int height = qMax(textLabel->sizeHint().height(), avatarLabel->sizeHint().height()) + 5;
    item->setSizeHint(QSize(ui->listWidget->width(), height));// 设置项的大小为QWidget的大小

    // 6.添加到控件中
    ui->listWidget->addItem(item);
    ui->listWidget->setItemWidget(item, itemWidget);
}

void MainWindow::AddDeepSeekItem(const QString &answer)
{

}

// 点击了发送按钮
void MainWindow::on_sendBtn_clicked()
{
    // 不为空才进一步处理
    if(!ui->inputPlainTextEdit->toPlainText().isEmpty()){
        QString question = ui->inputPlainTextEdit->toPlainText();
        ui->inputPlainTextEdit->clear();// 清空输入
        AddMyItem(question);
    }
}


void MainWindow::on_clearBtn_clicked()
{
    // 1.弹窗询问是否确认清空聊天记录
    bool isOk = AskDialog::GetUserClick(this, "操作提示", "确定要清空聊天记录吗？");
    if(!isOk) return;
    ui->listWidget->clear();
}


void MainWindow::on_reConnBtn_clicked()
{
    // 重连操作...

    // 弹出提示框告知结果
    TipDialog* p = TipDialog::GetInstance(this);
    p->SetText("服务器通知", "重连成功");
    p->show();
}


void MainWindow::on_closeBtn_clicked()
{
    bool isOk = AskDialog::GetUserClick(this, "操作提示", "确定要关闭程序吗？");
    if(!isOk) return;
    this->close();// 关闭主窗口
}

